__all__ 列表
__all__ 列表
__all__ 是模块或包中的一个列表变量,用来控制 from 模块名 import * 时哪些名称会被导入。
如果一个模块文件中有__all__ 变量,当使用from 模块名 import * 导入时,只能导入这个列表中的元素。
常见用法
-
限定对外 API:只把你希望“被当作公开接口”的对象放入
__all__ -
让模块对外暴露更稳定:内部实现细节不在
__all__中 -
my_module1模块代码
__all__ = ['testA']
def testA():
print('testA')
def testB():
print('testB')
- 导入模块的文件代码
from my_module1 import *
testA()
testB() # 无法运行,因为没有被导入
模块与包的区别
- 在模块(单个文件)里:
__all__控制import *的导入范围 - 在包里:
__init__.py也可以定义__all__来控制from 包名 import *
工程实践中更推荐显式导入(from x import y),避免 import * 带来的命名冲突与可读性问题。